 <?php
	class FileManager
	{
		// 단일 파일을 저장한다.
		public static function uploadSingleFile( $uploadPath, $fileName, $file )
		{
			// 폴더 없을시 재귀적 동적 생성
			$paths	= explode( '/', $uploadPath );
			$directory = '';
			while( count( $paths ) > 1 )
			{
				$directory .= (array_shift( $paths ).'/');
				if( !file_exists( $directory ) )
				{
					mkdir( $directory );
				}
			}
			
			// 파일 저장
			$uploadfile = $uploadPath.$fileName;
			if ($newFile = move_uploaded_file($file['tmp_name'], $uploadfile)) {
				return $uploadfile;
			} else {
				return false;
			}
		}
		
		// 다중 파일을 저장한다. 단, 확장자는 기존 파일명의 확장자를 따른다.
		public static function uploadMultiFiles( $uploadPath, $fileNamesPrefix, $files )
		{
			if( $files == null ) return array();
			
			$result = self::multiFilesArrage( $files );
			
			$uploadfiles = array();
			
			foreach( $result as $index=>$file )
			{
				$index = 0;
				if( $file['size']>0 )
				{
					$ext = explode( ".", $file['name'] );
					while( true )
					{
						$tempFileName = $fileNamesPrefix.(++$index).'.'.$ext[1];
						if( !file_exists( $uploadPath.$tempFileName ) )
						{
							// 존재하지 않는 파일명이 정해지면 저장 단계로 진행한다.
							break;
						}
					}
					// 저장 단계
					if( $newFileName = self::uploadSingleFile( $uploadPath, $tempFileName, $file ) )
					{
						array_push( $uploadfiles, $newFileName );
					}
				}
			}
			return $uploadfiles;
		}
		
		// request 로 받은 FILES Array 의 정보를 인덱스 형식으로 정렬함
		// >> ['name'], ['type'], ['size'] 형식으로 구분된 Array 를 [0], [1], [2] 식으로 정렬함
		private static function multiFilesArrage( $files )
		{
			$result = array(); 
			foreach($files as $key1 => $value1) 
				foreach($value1 as $key2 => $value2) 
					$result[$key2][$key1] = $value2; 
			return $result; 
		}
		
		// 파일 삭제
		public static function removeSingleFile( $uploadPath, $fileName )
		{
			// 파일 삭제
			if( $fileName == null || $fileName == '' )  return false;
			
			$uploadfile = $uploadPath.$fileName;
			if( file_exists( $uploadfile ) )
			{
				return unlink( $uploadfile );
			}
			return false;
		}
	}
?>